package com.agua.enturno.vista.paginas.adm.agendas.horarios;

import com.agua.enturno.modelo.turno.EstadoDeTurno;
import com.agua.enturno.servicios.TurnoService;
import com.agua.enturno.vista.componentes.ConfirmLink;
import com.agua.enturno.vista.dto.ClienteDTO;
import com.agua.enturno.vista.dto.TurnoDTO;
import com.agua.enturno.vista.modelos.DateTimeModel;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.joda.time.DateTime;

import java.util.List;

public class TablaAdministracionDeTurnos extends Panel {

	private static final long serialVersionUID = 1L;

	@SpringBean
	private TurnoService turnoService;
	
	
	public TablaAdministracionDeTurnos(String id, IModel<List<TurnoDTO>> model) {
		super(id, model);
		this.setOutputMarkupPlaceholderTag(true);
		this.setVisible(false);
		
		add(new ListView<TurnoDTO>("turnos", model) {
			private static final long serialVersionUID = 1L;

			@Override
			protected void populateItem(ListItem<TurnoDTO> item) {
				
				final TurnoDTO turno = item.getModelObject();
				ClienteDTO cliente = turno.getCliente();
				item.add(new Label("horario", new DateTimeModel(new Model<DateTime>(turno.getHorario().getIntervalo().getStart()))));
				item.add(new Label("vacante", turno.getNumero().toString()));
				
				if (cliente != null) 
					item.add(new Label("cliente", cliente.getUsuario().getNombre()));
				else 
					item.add(new Label("cliente", ""));
				
				item.add(new Label("estado", turno.getEstado().toString()));
				
				Link<String> actionLink = getActionLink(turno);
				actionLink.add(getActionLabel(turno));
				item.add(actionLink);
			}
		});
		
		add(new AjaxLink<String>("hide-link") {
			private static final long serialVersionUID = 1L;

			@Override
			public void onClick(AjaxRequestTarget target) {
				TablaAdministracionDeTurnos.this.setVisible(false);
				target.add(TablaAdministracionDeTurnos.this);
			}
		});
	}
	
	
	private Link<String> getActionLink(final TurnoDTO turno) {
		
		Link<String> actionLink = null;
		
		if (turno.getEstado().equals(EstadoDeTurno.DESHABILITADO)) {
			
			actionLink = new ConfirmLink("boton-accion", "¿Realmente desea habilitar el turno?") {
				private static final long serialVersionUID = 1L;

				@Override
				public void onClick() {
					turnoService.habilitarTurno(turno.getId());
				}
			};
			actionLink.add(AttributeModifier.replace("class", "btn btn-success"));
		}
		else {
			actionLink = new ConfirmLink("boton-accion", "¿Realmente desea deshabilitar el turno?") {
				private static final long serialVersionUID = 1L;

				@Override
				public void onClick() {
					turnoService.deshabilitarTurno(turno.getId(), "");
				}
			};
			actionLink.add(AttributeModifier.replace("class", "btn btn-warning"));
		}
		
		return actionLink;
	}

	private Label getActionLabel(final TurnoDTO turno) {
		
		if (turno.getEstado().equals(EstadoDeTurno.DESHABILITADO)) 
			return new Label("texto-accion", "Habilitar");
		else 
			return new Label("texto-accion", "Deshabilitar");
	}
	
}
